# 字节型文件: 以字节形式存储的数据文件, 例如 图片, 音频, 视频等
# 字符型文件: 使用字符集将字节型文件进行编码后的文件, 例如 :txt文件 csv文件等

# 创建一个 字符型数据
str1 = '我们要勇敢'
print(str1)
print(type(str1))
print('-----------------')

# 创建一个二进制字符串
byte1 = b'abc'
print(byte1)
print(type(byte1))

print('-----------------')
# 1. 将字符串数据类型,转换为字节型数据
# encode  编码
byte2 = str1.encode(encoding='utf8')
# 将str1 以utf8编码集转换为字节型数据,从5个字符转换为了15个字节, 所以一个汉字占用3个字节
print(byte2)  # b'\xe6\x88\x91\xe4\xbb\xac\xe8\xa6\x81\xe5\x8b\x87\xe6\x95\xa2'
print(type(byte2))  # <class 'bytes'>

byte3 = str1.encode(encoding='gbk')
# 将str1 以gbk编码集转换为字节型数据, 从5个字符转换为了10个字节, 所以一个汉字占2个字节
print(byte3)  # b'\xce\xd2\xc3\xc7\xd2\xaa\xd3\xc2\xb8\xd2'
print(type(byte3))  # <class 'bytes'>

print('-----------------')
# 2. 将字节型数据转换为字符型数据
# decode  解码
str2 = byte2.decode(encoding='utf8')
print(str2)  # 我们要勇敢
print(type(str2))  # <class 'str'>

str3 = byte3.decode(encoding='gbk')
print(str3)  # 我们要勇敢
print(type(str3))  # <class 'str'>


# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte
# 在进行编码集使用时,一定要注意,使用什么编码集编码,就要使用它解码,否则报错.
str4 = byte3.decode(encoding='utf8')
print(str4)
print(type(str4))

# 3. 字节型数据 + 编码集 = 字符型数据
# 使用正确的编码集可以让数据在字节型和字符型之间进行转换
# 但是不是所有的字节型数据都可以转换为字符型,必须时以字符集编码的字节型数据才可以使用该字符集解码.
